package com.sse.logica;

import java.util.Observer;


public interface IManejadorColas {

	/**
	 * Suscribe un objeto observador para recibir notificaciones 
	 * de una cola de eventos
	 * @param procesador Objeto observador
	 */
	public void suscribirProcesadorEventos(Observer procesador);

	/**
	 * Suscribe un objeto observador para recibir notificaciones 
	 * de una cola de alertas
	 * @param procesador Objeto observador
	 */
	public void suscribirProcesadorAlertas(Observer procesador);

	/**
	 * Encola un evento para procesamiento.
	 * @param data Arreglo de bytes con la informacion
	 */
	public void encolarEvento(byte[] data);
	
	/**
	 * Encola una alerta para procesamiento
	 * @param data Arreglo de bytes con la informacion
	 */
	public void encolarAlerta(byte[] data);
	
	/**
	 * Encola una alerta con alta prioridad, queda en la cabeza  de la cola.
	 * @param data Arreglo de bytes con la informacion
	 */
	public void encolarAlertaConPrioridad(byte[] data);
	
	/**
	 * Obtiene el primer elemento en la cola de alertas.
	 * @return byte[] con la alerta en la cabeza de la cola.
	 */
	public byte[] obtenerAlerta();
	
	/**
	 * Obtiene el primer elemento en la cola de la eventos.
	 * @return byte[] con el evento en la cabeza de la cola.
	 */
	public byte[] obtenerEvento();
	
	/**
	 * Permite encolar de manera asincrona un evento para procesamiento.
	 * @param data 
	 */
	public void encolarEventoAsincrono(byte data[]);
	
}
